/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.upc.dew.cobranzas.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import pe.edu.upc.dew.cobranzas.model.Contrato;
import pe.edu.upc.dew.cobranzas.model.Cuenta;
import pe.edu.upc.dew.cobranzas.model.Cuota;
import pe.edu.upc.dew.cobranzas.service.ContratoServiceImpl;
import pe.edu.upc.dew.cobranzas.service.CuentaServiceImpl;
import pe.edu.upc.dew.cobranzas.service.CuotaServiceImpl;
import pe.edu.upc.dew.cobranzas.service.PagoServiceImpl;

/**
 *
 * @author Ivan
 */
public class PagoController implements Controller {

    private PagoServiceImpl pagoService;
    private CuentaServiceImpl cuentaService;
    private ContratoServiceImpl contratoService;
    private CuotaServiceImpl cuotaService;
    private String inicio;

    public void setContratoService(ContratoServiceImpl contratoService) {
        this.contratoService = contratoService;
    }

    public void setCuentaService(CuentaServiceImpl cuentaService) {
        this.cuentaService = cuentaService;
    }

    public void setCuotaService(CuotaServiceImpl cuotaService) {
        this.cuotaService = cuotaService;
    }

    public void setPagoService(PagoServiceImpl pagoService) {
        this.pagoService = pagoService;
    }

    public void setInicio(String inicio) {
        this.inicio = inicio;
    }

    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        req.setAttribute("cuentas", cuentaService.Listado());
        req.setAttribute("contratos", contratoService.Listado());
        req.setAttribute("cuota", "");

        int idPago = 0;
        String fecha = "";
        Double monto = 0.00;
        String formaPago = "";
        String observaciones = "";
        String numCuenta = "";
        int idContrato = 0;
        int idCuota = 0;


        if (this.inicio.equals("I")) {
            this.inicio = "R";
        } else {
            String boton = req.getParameter("boton");
            if (!req.getParameter("txtidpago").equals("")) {
                idPago = Integer.parseInt(req.getParameter("txtidpago"));
            }
            numCuenta = req.getParameter("cmbcuenta");
            fecha = req.getParameter("txtfecha");
            if (!req.getParameter("txtmonto").equals("")) {
                monto = Double.parseDouble(req.getParameter("txtmonto"));
            }
            formaPago = req.getParameter("cmbformapago");
            observaciones = req.getParameter("txtobservaciones");
            idContrato = Integer.parseInt(req.getParameter("cmbcontrato"));
            if (!req.getParameter("txtcuota").equals("")) {
                idCuota = Integer.parseInt(req.getParameter("txtcuota"));
            }


            if (boton.equals("cuota")) {

                idCuota = cuotaService.getCuotaPendiente(Integer.parseInt(req.getParameter("cmbcontrato")));

                if (idCuota == 0) {
                    JOptionPane.showMessageDialog(null, "No existen cuotas pendientes en el contrato seleccionado", "Error", JOptionPane.ERROR_MESSAGE);
                    req.setAttribute("cuota", "");
                } else {
                    req.setAttribute("cuota", idCuota);
                }
                req.setAttribute("fecha", fecha);
                req.setAttribute("monto", monto);
                req.setAttribute("observaciones", observaciones);

            }

            /*Obtener la cuenta*/
            Cuenta cuenta = new Cuenta();
            cuenta = cuentaService.getCuentaxNroCuenta(numCuenta);
            /*Obtener el contrato*/
            Contrato contrato = new Contrato();
            contrato = contratoService.getContratoPorCodigo(idContrato);
            /*Obtener la cuota*/
            Cuota cuota = new Cuota();
            cuota = cuotaService.getCuota(contrato, idCuota);
            if (boton.equals("Registrar")) {
                /*grabando*/
                pagoService.Registra(idPago, fecha, monto, formaPago, observaciones, cuenta, contrato, cuota);
                cuotaService.actualizarEstado(contrato, cuota, "Cancelado");
            }
            if (boton.equals("Eliminar")) {
                int id = Integer.parseInt(req.getParameter("pagoSeleccionado"));
                pagoService.Elimina(id);
                cuotaService.actualizarEstado(contrato, cuota, "Pendiente");

            }

        }
        req.setAttribute("pagos", pagoService.Listado());
        req.setAttribute("idNuevo", pagoService.getNuevoCodido());

        return new ModelAndView("pagos");
    }
}
